/**
 * //珠玑妙算游戏（the game of master mind）的玩法如下。
 * // 计算机有4个槽，每个槽放一个球，颜色可能是红色（R）、黄色（Y）、绿色（G）或蓝色（B）。例如，计算机可能有RGGB 4种（槽1为红色，槽2、3为绿色，槽
 * //4为蓝色）。作为用户，你试图猜出颜色组合。打个比方，你可能会猜YRGB。要是猜对某个槽的颜色，则算一次“猜中”；要是只猜对颜色但槽位猜错了，则算一次“伪猜中”。
 * //注意，“猜中”不能算入“伪猜中”。
 * // 给定一种颜色组合solution和一个猜测guess，编写一个方法，返回猜中和伪猜中的次数answer，其中answer[0]为猜中的次数，answer[
 * //1]为伪猜中的次数。
 * // 示例：
 * // 输入： solution="RGBY",guess="GGRR"
 * //输出： [1,1]
 * //解释： 猜中1次，伪猜中1次。
 * //
 * // 提示：
 * //
 * // len(solution) = len(guess) = 4
 * // solution和guess仅包含"R","G","B","Y"这4种字符
 * //
 * // Related Topics 哈希表 字符串 计数 👍 36 👎 0
 */

package com.xixi.easy;

public class ID_Interview_16_15_MasterMindLcci {
    public static void main(String[] args) {
        Solution solution = new ID_Interview_16_15_MasterMindLcci().new Solution();
    }


    //leetcode submit region begin(Prohibit modification and deletion)
    class Solution {


        //0:R
        //1:Y
        //2:G
        //3:B
        int[] solutionCount = new int[]{0, 0, 0, 0};
        int[] guessCount = new int[]{0, 0, 0, 0};

        public int[] masterMind(String solution, String guess) {

            int[] answer = new int[]{0, 0};
            char[] solChar = solution.toCharArray();
            char[] gueChar = guess.toCharArray();

            //找到猜中的次数，并记录solution和guess其余颜色出现的次数
            for (int i = 0; i < 4; i++) {
                if (solChar[i] == gueChar[i]) {
                    answer[0]++;
                } else {
                    switch (solChar[i]) {
                        case 'R':
                            solutionCount[0]++;
                            break;
                        case 'Y':
                            solutionCount[1]++;
                            break;
                        case 'G':
                            solutionCount[2]++;
                            break;
                        case 'B':
                            solutionCount[3]++;
                            break;
                    }

                    switch (gueChar[i]) {
                        case 'R':
                            guessCount[0]++;
                            break;
                        case 'Y':
                            guessCount[1]++;
                            break;
                        case 'G':
                            guessCount[2]++;
                            break;
                        case 'B':
                            guessCount[3]++;
                            break;
                    }

                }


            }


            //如果伪猜中颜色出现，则取solutionCount和guessCount中较小的为改颜色的伪猜中次数
            for (int i = 0; i < 4; i++) {
                if (guessCount[i] > 0) {
                    answer[1] += Math.min(solutionCount[i], guessCount[i]);
                }

            }


            return answer;

        }
    }
//leetcode submit region end(Prohibit modification and deletion)


}